﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>

//int main()
//{
//	int arr[][3] = { {1,'\0',2} , {4}, {6}};//二维数组，当想要空一个设置的时候，可以用‘\0’代表空格。
//
//	return 0;
//}

//创建一个数组，
//实现函数init（）初始化数组、
//实现empty（）清空数组、
//实现reverse（）函数完成数组元素的逆置。
//要求：自己设计函数的参数，返回值。

//void init(int arr[], int se)
//{
//	int i = 0;
//	for (i = 0; i < se; i++)
//		arr[i] = 1;
//}
//
////当然这里int arr[] 可以写成 int* arr
//void print(int arr[], int se)
//{
//	int i = 0;
//	for (i = 0; i < se; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//
//}
//
//void empty(int arr[], int se)
//{
//	int i = 0;
//	for (i = 0; i < se; i++)
//		arr[i] = '\0';// \0 代表空格 为空
//
//}
//
//void reverse(int* arr, int se)
//{
//	int z = 0;//左下标
//	int y = se - 1;//右下标
//	int t = 0;//替换数
//
//	while (z < y)
//	{
//		t = arr[z];
//		arr[z] = arr[y];
//		arr[y] = t;
//		z++;   y--;
//	}
//
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int se = sizeof(arr) / sizeof(arr[0]);
//	
//	print(arr, se);//打印数组
//
//	reverse(arr, se); //函数完成数组元素的逆置。
//	print(arr, se);//打印数组
//
//
//	empty(arr, se); //清空数组
//	print(arr, se);//打印数组
//
//
//	init(arr, se);//初始化数组 全为 1
//	print(arr, se);//打印数组
//
//
//	return 0;
//}
//
//4. 编写一个函数 reverse_string(char* string)（递归实现）
//实现：将参数字符串中的字符反向排列。
//要求：不能使用C函数库中的字符串操作函数。

//int reverse_c_d(char* arr)//求字符串长度
//{
//	if ( *arr != '\0')
//		return 1 + reverse_c_d(arr + 1);
//	else
//		return 0;
//}
//
//void reverse_string(char arr[])//逆值 字符串
//{
//	int rep = reverse_c_d(arr);//长度值
//	
//	if (rep <= 1)//结束条件
//		return;
//	else
//	{
//
//		int tmp = arr[0];  //先把第一位的值保存下来
//		arr[0] = arr[rep - 1];//再把最后一位的值移到前面
//		arr[rep - 1] = '\0';//再把最后一位先赋值在 \0 改变长度的值
//		reverse_string(arr + 1);//把首元素地址向后退一位 继续递归交换
//		arr[rep - 1] = tmp;//再把最后一位元素赋值成 第一位的值
//	}
//	
//}
//
//int main()
//{
//	char arr[] = "abc123";
//	reverse_string(arr);
//
//	printf("%s\n", arr);
//	return 0;
//}
//
//BC92 逆序输出
//
//#include<stdio.h>
//
//int main()
//{
//    int arr[11] = { 0 };
//    for (int i = 0; i < 10; i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//
//    for (int i = 9; i >= 0; i--)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}

//总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
//#include <stdio.h>
////演示实例
//int main()
//{
//	int n = 10;
//	char* pc = (char*)&n;
//	int* pi = &n;
//
//	printf("%p\n", &n);
//	printf("%p\n", pc);
//	printf("%p\n", pc + 1);
//	printf("%p\n", pi);
//	printf("%p\n", pi + 1);
//	return 0;
//}

//不同指针类型的访问空间不一样，有意义！
//演示实例
//#include <stdio.h>
//int main()
//{
//	int a = 0x11223344;
//
//	double* pc = &a;
//	*pc = 0;
//
//  char* pc = &a;
//	*pc = 0;
// 
//	//int* pa = &a;
//	//*pa = 0;  
//	return 0;
//}